/**
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package pittypat.primitives;

import java.io.IOException;
import java.io.Writer;

import pittypat.Json;

/**
 * 实现了 IJson 的 32 位浮点数。
 */
public final class Float implements IPrimitive {
	/**
	 * 将指定的字符串值解析为 Float 值。
	 * 
	 * @param s
	 *            要解析的字符串。
	 * @return 解析后的 Float。
	 */
	public static java.lang.Float parse(java.lang.String s) {
		if (s == null || s.length() == 0) {
			return null;
		}

		s = s.trim();
		if (s.length() == 0) {
			return null;
		}

		if (s.equalsIgnoreCase("min") || s.equalsIgnoreCase("minvalue") || s.equalsIgnoreCase("min_value")) {
			return -3.40282347E+38F;
		}

		if (s.equalsIgnoreCase("max") || s.equalsIgnoreCase("maxvalue") || s.equalsIgnoreCase("max_value")) {
			return 3.40282347E+38F;
		}

		if (s.equalsIgnoreCase("zero") || s.equalsIgnoreCase("default")) {
			return 0F;
		}

		if (s.equalsIgnoreCase("epsilon")) {
			return 1.401298E-45F;
		}

		if (s.equalsIgnoreCase("nan")) {
			return java.lang.Float.NaN;
		}

		if (s.equalsIgnoreCase("negativeinfinity") || s.equalsIgnoreCase("negative_infinity")) {
			return java.lang.Float.NEGATIVE_INFINITY;
		}

		if (s.equalsIgnoreCase("positiveinfinity") || s.equalsIgnoreCase("positive_infinity")) {
			return java.lang.Float.POSITIVE_INFINITY;
		}

		try {
			return java.lang.Float.parseFloat(s);
		} catch (Exception e) {
			return null;
		}
	}

	private java.lang.Float value;

	/**
	 * 使用指定的值初始化 Float 类的新实例。
	 * 
	 * @param value
	 *            值。
	 */
	public Float(java.lang.Float value) {
		this.value = value;
	}

	/**
	 * 获取基础类型的值。
	 * 
	 * @return 基础类型的值。
	 */
	public java.lang.Float getValue() {
		return this.value;
	}

	/**
	 * 将当前对象作为 JSON 字符串写入指定的文本流。
	 * 
	 * @param writer
	 *            目标文本流。
	 * @throws IOException
	 * @see pittypat.IJson#write(java.io.Writer)
	 */
	@Override
	public void write(Writer writer) throws IOException {
		Json.write(writer, value);
	}
}
